//package com.example.demo.service;
//
//import com.example.demo.entity.Order;
//import com.example.demo.repository.OrderRepository;
//import com.example.demo.util.HashUtils;
//import lombok.RequiredArgsConstructor;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.time.LocalDateTime;
//import java.util.List;
//import java.util.NoSuchElementException;
//
///**
// * 订单服务类，包含创建、更新订单和验证哈希链的逻辑
// */
//@Service
//@RequiredArgsConstructor
//public class OrderService {
//
//    private final OrderRepository orderRepository;
//    private final HashUtils hashUtils;
//
//    /**
//     * 创建新订单，生成初始哈希
//     */
//    @Transactional
//    public Order createOrder(Order order) {
//        LocalDateTime now = LocalDateTime.now();
//        order.setCreatedAt(now);
//        order.setUpdateTimestamp(now);
//
//        // 计算初始哈希
//        String initialHash = hashUtils.calculateInitialHash(order.getCoreFields());
//        order.setCurrentHash(initialHash);
//        order.setPreviousHash(null); // 初始记录没有前置哈希
//
//        return orderRepository.save(order);
//    }
//
//    /**
//     * 更新订单，创建新的版本并维护哈希链
//     */
//    @Transactional
//    public Order updateOrder(Order updatedOrder) {
//        // 获取当前最新版本
//        Order currentOrder = orderRepository.findFirstByOrderNoOrderByUpdateTimestampDesc(updatedOrder.getOrderNo())
//                .orElseThrow(() -> new NoSuchElementException("订单不存在: " + updatedOrder.getOrderNo()));
//
//        // 创建新版本记录
//        Order newVersion = new Order();
//        newVersion.setOrderNo(updatedOrder.getOrderNo());
//        newVersion.setAmount(updatedOrder.getAmount());
//        newVersion.setStatus(updatedOrder.getStatus());
//        newVersion.setCreatedAt(currentOrder.getCreatedAt()); // 保持创建时间不变
//        newVersion.setUpdateTimestamp(LocalDateTime.now());
//
//        // 计算新的哈希值，基于上一个版本的哈希
//        String newHash = hashUtils.calculateChainHash(currentOrder.getCurrentHash(), newVersion.getCoreFields());
//        newVersion.setCurrentHash(newHash);
//        newVersion.setPreviousHash(currentOrder.getCurrentHash());
//
//        return orderRepository.save(newVersion);
//    }
//
//    /**
//     * 验证订单的哈希链完整性
//     */
//    @Transactional(readOnly = true)
//    public boolean verifyOrderIntegrity(String orderNo) {
//        List<Order> allVersions = orderRepository.findAllVersionsByOrderNo(orderNo);
//        if (allVersions.isEmpty()) {
//            return false;
//        }
//
//        // 验证第一个版本（初始版本）
//        Order firstVersion = allVersions.get(0);
//        String expectedFirstHash = hashUtils.calculateInitialHash(firstVersion.getCoreFields());
//        if (!expectedFirstHash.equals(firstVersion.getCurrentHash()) || firstVersion.getPreviousHash() != null) {
//            return false;
//        }
//
//        // 验证后续版本
//        for (int i = 1; i < allVersions.size(); i++) {
//            Order currentVersion = allVersions.get(i);
//            Order previousVersion = allVersions.get(i - 1);
//
//            // 验证previousHash是否与上一版本的currentHash一致
//            if (!previousVersion.getCurrentHash().equals(currentVersion.getPreviousHash())) {
//                return false;
//            }
//
//            // 验证当前版本的哈希值是否正确
//            String expectedCurrentHash = hashUtils.calculateChainHash(previousVersion.getCurrentHash(), currentVersion.getCoreFields());
//            if (!expectedCurrentHash.equals(currentVersion.getCurrentHash())) {
//                return false;
//            }
//        }
//
//        return true;
//    }
//}
